<?php

namespace Jammiest\SwigeCore\Interface;

/**
 * 服务器事件处理接口
 * 参考：https://www.swoole.com/docs/modules/swoole-server/events
 * 
 */
interface EventHandlerInterface
{
    /**
     * 在服务器启动时回调此函数
     * 
     * @param \Swoole\Server $server
     * @return void
     */
    function onStart($server);
    /**
     * 在管理进程（manager）启动时回调此函数
     * 
     * @param \Swoole\Server $server
     * @return void
     */
    function onBeforeShutdown($server);
    /**
     * 在服务器关闭时回调此函数
     * 
     * @param \Swoole\Server $server
     * @return void
     */
    function onShutdown($server);

    /**
     * 在工作进程（worker）启动时回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $workerId
     * @return void
     */
    function onWorkerStart($server, $workerId);
    /**
     * 在工作进程（worker）停止时回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $workerId
     * @return void
     */
    function onWorkerStop($server, $workerId);

    /**
     * 在工作进程（worker）异常退出时回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $workerId
     * @param int $exitCode
     * @param int $signal
     * @return void
     */
    function onWorkerError($server, $workerId, $exitCode, $signal);

    /**
     * 在任务进程（task worker）启动时回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $workerId
     * @return void
     */
    function onTaskWorkerStart($server, $workerId);
    /**
     * 在任务进程（task worker）停止时回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $workerId
     * @return void
     */
    function onTaskWorkerStop($server, $workerId);
    /**
     * 当一个异步任务投递到任务队列时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $taskId
     * @param int $reactorId
     * @param mixed $data
     * @return void
     */
    function onTask($server, $taskId, $reactorId, $data);
    /**
     * 当一个异步任务完成时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $taskId
     * @param mixed $data
     * @return void
     */
    function onFinish($server, $taskId, $data);
    /**
     * 当管理进程（manager）启动时回调此函数
     * 
     * @param \Swoole\Server $server
     * @return void
     */
    function onManagerStart($server);
    /**
     * 当管理进程（manager）停止时回调此函数
     * 
     * @param \Swoole\Server $server
     * @return void
     */
    function onManagerStop($server);

    /**
     * 当有新的TCP连接进入时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $fd
     * @param int $reactorId
     * @return void
     */
    function onConnect($server, $fd, $reactorId);

    /**
     * 当TCP连接关闭后，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $fd
     * @return void
     */
    function onClose($server, $fd);

    /**
     * 当服务器接收到数据时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $fd
     * @param int $reactorId
     * @param string $data
     * @return void
     */
    function onReceive($server, $fd, $reactorId, $data);

    /**
     * 当HTTP请求到达时，服务器会回调此函数
     * 
     * @param \Swoole\Http\Server $server
     * @param \Swoole\Http\Request $request
     * @param \Swoole\Http\Response $response
     * @return void
     */
    function onRequest($server, $request, $response);

    /**
     * 当WebSocket客户端连接打开时，服务器会回调此函数
     * 
     * @param \Swoole\WebSocket\Server $server
     * @param \Swoole\Http\Request $request
     * @return void
     */
    function onOpen($server, $request);

    /**
     * 当WebSocket客户端连接关闭时，服务器会回调此函数
     * 
     * @param \Swoole\WebSocket\Server $server
     * @param int $fd
     * @return void
     */

    function onWsClose($server, $fd);

    /**
     * 当WebSocket客户端发送消息时，服务器会回调此函数
     * 
     * @param \Swoole\WebSocket\Server $server
     * @param \Swoole\WebSocket\Frame $frame
     * @return void
     */
    function onMessage($server, $frame);

 /**
  * WebSocket 建立连接后进行握手。WebSocket 服务器会自动进行 handshake 握手的过程，如果用户希望自己进行握手处理，可以设置 onHandShake 事件回调函数。
  *
  * @param [type] $request
  * @param [type] $response
  * @return void
  */
    function onHandShake($request, $response);

    /**
     * 当管道消息到达时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $fromWorkerId
     * @param string $message
     * @return void
     */
    function onPipeMessage($server, $fromWorkerId, $message);

    /**
     * 当定时器到达时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $intervalId
     * @return void
     */
    function onTimer($server, $intervalId);

    /**
     * 当Worker进程收到由sendMessage发送的消息时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $srcWorkerId
     * @param string $message
     * @return void
     */
    function onWorkerMessage($server, $srcWorkerId, $message);

    /**
     * 当HTTP2连接关闭时，服务器会回调此函数
     * 
     * @param \Swoole\Http\Server $server
     * @param int $fd
     * @return void
     */
    function onHttp2Close($server, $fd);

    /**
     * 当SSL握手完成时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $fd
     * @return void
     */
    function onSslHandshake($server, $fd);

    /**
     * 当SSL握手失败时，服务器会回调此函数
     * 
     * @param \Swoole\Server $server
     * @param int $fd
     * @return void
     */
    function onSslClose($server, $fd);

    /**
     * 当HTTP请求体接收完成后，服务器会回调此函数
     * 
     * @param \Swoole\Http\Server $server
     * @param \Swoole\Http\Request $request
     * @return void
     */
    function onRequestBody($server, $request);

    /**
     * 当HTTP请求体接收完成后，服务器会回调此函数
     * 
     * @param \Swoole\Http\Server $server
     * @param \Swoole\Http\Request $request
     * @return void
     */
    function onRequestHeaders($server, $request);
}
